import * as vscode from 'vscode';
import {dedent} from "../../../utils";

// documentation中使用了代码块，代码块中写的事makedown格式，首行不能为空
let scrollViewItems = [
    {
        "label": "ScrollView_Create",
        "insertText": dedent`
        local scrollView = GUI:ScrollView_Create(\${1:parent}, \${2:"scrollView"}, \${3:0}, \${4:0}, \${5:300}, \${6:500}, \${7:1})
        `,
        "documentation": dedent`# 创建滚动容器
        ## ScrollView_Create(parent, ID, x, y, width, height, direction)

        | 参数      | 必选 | 类型   | 注释             |
        | :-------- | :--- | :----- | :--------------- |
        | parent    | 是   | obj    | 父节点对象       |
        | ID        | 是   | string | 唯一ID           |
        | x         | 是   | int    | 位置 横坐标      |
        | y         | 是   | int    | 位置 纵坐标      |
        | width     | 是   | int    | 宽度             |
        | height    | 是   | int    | 高度             |
        | direction | 是   | int    | 1：垂直; 2：水平 |

        - 示例代码
        \`\`\`
        local scrollView = GUI:ScrollView_Create(parent, "scrollView", 0, 0, 300, 500, 1)
        \`\`\`
        `
    },
    {
        "label": "ScrollView_setInnerContainerSize",
        "insertText": dedent`
        GUI:ScrollView_setInnerContainerSize(\${1:ScrollView}, \${2:300}, \${3:400})
        `,
        "documentation": dedent`# 设置滚动容器滚动范围大小
        ## ScrollView_setInnerContainerSize(widget, value1, value2)

        | 参数   | 必选 | 类型         | 注释         |
        | :----- | :--- | :----------- | :----------- |
        | widget | 是   | obj          | 容器对象     |
        | value1 | 是   | int 或 table | 宽度 或 尺寸 |
        | value2 | 否   | int          | 高度         |

        - 代码示例
        \`\`\`
        local width = 300
        local height = 400
        local size = {width = 300, height = 400}
        GUI:ScrollView_setInnerContainerSize(ScrollView, width, height)
        GUI:ScrollView_setInnerContainerSize(ScrollView, size)
        \`\`\`
        `
    },
    {
        "label": "ScrollView_getInnerContainerSize",
        "insertText": dedent`
        local size = GUI:ScrollView_getInnerContainerSize(\${1:ScrollView})
        `,
        "documentation": dedent`# 获取滚动容器滚动范围大小
        ## ScrollView_getInnerContainerSize(widget)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 容器对象 |

        - 返回值：滚动容器滚动范围大小
        `
    },
    {
        "label": "ScrollView_getInnerContainerPosition",
        "insertText": dedent`
        local position = GUI:ScrollView_getInnerContainerPosition(\${1:ScrollView})
        `,
        "documentation": dedent`# 获取容器内部滚动区域坐标 [3.40.3版本]
        ## ScrollView_getInnerContainerPosition(widget)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 容器对象 |

        - 返回值 容器内部滚动区域坐标
        `
    },
    {
        "label": "ScrollView_setDirection",
        "insertText": dedent`
        GUI:ScrollView_setDirection(\${1:ScrollView}, \${2:1})
        `,
        "documentation": dedent`# 设置滚动容器滚动方向
        ## ScrollView_setDirection(widget, value)

        | 参数   | 必选 | 类型 | 注释             |
        | :----- | :--- | :--- | :--------------- |
        | widget | 是   | obj  | 容器对象         |
        | value  | 是   | int  | 1：垂直; 2：水平 |
        `
    },
    {
        "label": "ScrollView_setBounceEnabled",
        "insertText": dedent`
        GUI:ScrollView_setBounceEnabled(\${1:ScrollView}, \${2:true})
        `,
        "documentation": dedent`# 设置滚动容器是否有回弹
        ## ScrollView_setBounceEnabled(widget, value)

        | 参数   | 必选 | 类型 | 注释       |
        | :----- | :--- | :--- | :--------- |
        | widget | 是   | obj  | 容器对象   |
        | value  | 是   | bool | 是否有回弹 |
        `
    },
    {
        "label": "ScrollView_setClippingEnabled",
        "insertText": dedent`
        GUI:ScrollView_setClippingEnabled(\${1:ScrollView}, \${2:true})
        `,
        "documentation": dedent`# 设置滚动容器是否有裁切
        ## ScrollView_setClippingEnabled(widget, value)

        | 参数   | 必选 | 类型 | 注释       |
        | :----- | :--- | :--- | :--------- |
        | widget | 是   | obj  | 容器对象   |
        | value  | 是   | bool | 是否有裁切 |
        `
    },
    {
        "label": "ScrollView_setBackGroundColor",
        "insertText": dedent`
        GUI:ScrollView_setBackGroundColor(\${1:ScrollView}, \${2:"#000000"})
        `,
        "documentation": dedent`# 设置滚动容器背景颜色
        ## ScrollView_setBackGroundColor(widget, value)

        | 参数   | 必选 | 类型   | 注释                                                         |
        | :----- | :--- | :----- | :----------------------------------------------------------- |
        | widget | 是   | obj    | 容器对象                                                     |
        | value  | 是   | string | 色值(“#000000”) ! 渐变色需传参table \`{"#FF0000", "#FFFFFF"}\` |
        `
    },
    {
        "label": "ScrollView_setBackGroundColorType",
        "insertText": dedent`
        GUI:ScrollView_setBackGroundColorType(\${1:ScrollView}, \${2:1})
        `,
        "documentation": dedent`# 设置滚动容器背景颜色类型
        ## ScrollView_setBackGroundColorType(widget, value)

        | 参数   | 必选 | 类型 | 注释               |
        | :----- | :--- | :--- | :----------------- |
        | widget | 是   | obj  | 容器对象           |
        | value  | 是   | int  | 1：单色，2：渐变色 |
        `
    },
    {
        "label": "ScrollView_setBackGroundOpacity",
        "insertText": dedent`
        GUI:ScrollView_setBackGroundOpacity(\${1:ScrollView}, \${2:255})
        `,
        "documentation": dedent`# 设置滚动容器背景透明度
        ## ScrollView_setBackGroundOpacity(widget, value)

        | 参数   | 必选 | 类型 | 注释          |
        | :----- | :--- | :--- | :------------ |
        | widget | 是   | obj  | 容器对象      |
        | value  | 是   | int  | 透明度(0-255) |
        `
    },
    {
        "label": "ScrollView_setBackGroundImage",
        "insertText": dedent`
        GUI:ScrollView_setBackGroundImage(\${1:ScrollView}, \${2:"path/to/image.png"})
        `,
        "documentation": dedent`# 设置滚动容器背景图片
        ## ScrollView_setBackGroundImage(widget, value)

        | 参数   | 必选 | 类型   | 注释     |
        | :----- | :--- | :----- | :------- |
        | widget | 是   | obj    | 容器对象 |
        | value  | 是   | string | 图片路径 |
        `
    },
    {
        "label": "ScrollView_setBackGroundImageScale9Slice",
        "insertText": dedent`
        GUI:ScrollView_setBackGroundImageScale9Slice(\${1:ScrollView}, \${2:10}, \${3:10}, \${4:10}, \${5:10})
        `,
        "documentation": dedent`# 设置滚动器背景图片九宫格
        ## ScrollView_setBackGroundImageScale9Slice(widget, scale9l, scale9r, scale9t, scale9b)

        | 参数    | 必选 | 类型 | 注释     |
        | :------ | :--- | :--- | :------- |
        | widget  | 是   | obj  | 容器对象 |
        | scale9l | 是   | int  | 左边比例 |
        | scale9r | 是   | int  | 右边比例 |
        | scale9t | 是   | int  | 上边比例 |
        | scale9b | 是   | int  | 下边比例 |
        `
    },
    {
        "label": "ScrollView_removeBackGroundImage",
        "insertText": dedent`
        GUI:ScrollView_removeBackGroundImage(\${1:ScrollView})
        `,
        "documentation": dedent`# 移除滚动容器背景图片设置 [3.40.5版本]
        ## ScrollView_removeBackGroundImage(widget)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 容器对象 |
        `
    },
    {
        "label": "ScrollView_addOnScrollEvent",
        "insertText": dedent`
        GUI:ScrollView_addOnScrollEvent(\${1:ScrollView}, \${2:function() \n    -- 回调函数\nend})
        `,
        "documentation": dedent`# 设置滚动容器滚动事件
        ## ScrollView_addOnScrollEvent(widget, eventCB)

        | 参数    | 必选 | 类型     | 注释     |
        | :------ | :--- | :------- | :------- |
        | widget  | 是   | obj      | 容器对象 |
        | eventCB | 是   | function | 事件函数 |
        `
    },
    {
        "label": "ScrollView_addChild",
        "insertText": dedent`
        GUI:ScrollView_addChild(\${1:ScrollView}, \${2:child})
        `,
        "documentation": dedent`# 滚动容器加载子节点
        ## ScrollView_addChild(widget, value)

        | 参数   | 必选 | 类型 | 注释       |
        | :----- | :--- | :--- | :--------- |
        | widget | 是   | obj  | 容器对象   |
        | value  | 是   | obj  | 子节点对象 |
        `
    },
    {
        "label": "ScrollView_removeAllChildren",
        "insertText": dedent`
        GUI:ScrollView_removeAllChildren(\${1:ScrollView})
        `,
        "documentation": dedent`# 滚动容器删除所有子节点
        ## ScrollView_removeAllChildren(widget)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 容器对象 |
        `
    },
    {
        "label": "ScrollView_scrollToTop",
        "insertText": dedent`
        GUI:ScrollView_scrollToTop(\${1:ScrollView}, \${2:0.5}, \${3:true})
        `,
        "documentation": dedent`# 滚动容器衰减滚动
        ## ScrollView_scrollToTop(widget, time, boolvalue)

        | 参数      | 必选 | 类型 | 注释             |
        | :-------- | :--- | :--- | :--------------- |
        | widget    | 是   | obj  | 容器对象         |
        | time      | 是   | int  | 时间             |
        | boolvalue | 是   | bool | 是否衰减（顶部） |
        `
    },
    {
        "label": "ScrollView_scrollToBottom",
        "insertText": dedent`
        GUI:ScrollView_scrollToBottom(\${1:ScrollView}, \${2:0.5}, \${3:true})
        `,
        "documentation": dedent`# 滚动容器衰减滚动
        ## ScrollView_scrollToBottom(widget, time, boolvalue)

        | 参数      | 必选 | 类型 | 注释             |
        | :-------- | :--- | :--- | :--------------- |
        | widget    | 是   | obj  | 容器对象         |
        | time      | 是   | int  | 时间             |
        | boolvalue | 是   | bool | 是否衰减（底部） |
        `
    },
    {
        "label": "ScrollView_scrollToTopLeft",
        "insertText": dedent`
        GUI:ScrollView_scrollToTopLeft(\${1:ScrollView}, \${2:0.5}, \${3:true})
        `,
        "documentation": dedent`# 滚动容器衰减滚动
        ## ScrollView_scrollToTopLeft(widget, time, boolvalue)

        | 参数      | 必选 | 类型 | 注释             |
        | :-------- | :--- | :--- | :--------------- |
        | widget    | 是   | obj  | 容器对象         |
        | time      | 是   | int  | 时间             |
        | boolvalue | 是   | bool | 是否衰减（顶左） |
        `
    },
    {
        "label": "ScrollView_scrollToRight",
        "insertText": dedent`
        GUI:ScrollView_scrollToRight(\${1:ScrollView}, \${2:0.5}, \${3:true})
        `,
        "documentation": dedent`# 滚动容器衰减滚动
        ## ScrollView_scrollToRight(widget, time, boolvalue)

        | 参数      | 必选 | 类型 | 注释             |
        | :-------- | :--- | :--- | :--------------- |
        | widget    | 是   | obj  | 容器对象         |
        | time      | 是   | int  | 时间             |
        | boolvalue | 是   | bool | 是否衰减（右边） |
        `
    },
    {
        "label": "ScrollView_scrollToLeft",
        "insertText": dedent`
        GUI:ScrollView_scrollToLeft(\${1:ScrollView}, \${2:0.5}, \${3:true})
        `,
        "documentation": dedent`# 滚动容器衰减滚动
        ## ScrollView_scrollToLeft(widget, time, boolvalue) [3.40.5版本]

        | 参数      | 必选 | 类型 | 注释             |
        | :-------- | :--- | :--- | :--------------- |
        | widget    | 是   | obj  | 容器对象         |
        | time      | 是   | int  | 时间             |
        | boolvalue | 是   | bool | 是否衰减（左边） |
        `
    },
    {
        "label": "ScrollView_scrollToPercentVertical",
        "insertText": dedent`
        GUI:ScrollView_scrollToPercentVertical(\${1:ScrollView}, \${2:50}, \${3:0.5}, \${4:true})
        `,
        "documentation": dedent`# 滚动容器衰减滚动
        ## ScrollView_scrollToPercentVertical(widget, percent, time, bool) [3.40.5版本]

        | 参数      | 必选 | 类型 | 注释             |
        | :-------- | :--- | :--- | :--------------- |
        | widget    | 是   | obj  | 容器对象         |
        | percent   | 是   | int  | 百分比           |
        | time      | 是   | int  | 时间             |
        | boolvalue | 是   | bool | 是否衰减滚动速度 |

        - 垂直方向滚动
        `
    },
    {
        "label": "ScrollView_scrollToPercentHorizontal",
        "insertText": dedent`
        GUI:ScrollView_scrollToPercentHorizontal(\${1:ScrollView}, \${2:50}, \${3:0.5}, \${4:true})
        `,
        "documentation": dedent`# 滚动容器衰减滚动
        ## ScrollView_scrollToPercentHorizontal(widget, percent, time, bool) [3.40.5版本]

        | 参数      | 必选 | 类型 | 注释             |
        | :-------- | :--- | :--- | :--------------- |
        | widget    | 是   | obj  | 容器对象         |
        | percent   | 是   | int  | 百分比           |
        | time      | 是   | int  | 时间             |
        | boolvalue | 是   | bool | 是否衰减滚动速度 |

        - 水平方向滚动
        `
    },
    {
        "label": "SetScrollViewVerticalBar",
        "insertText": dedent`
        GUI:SetScrollViewVerticalBar(\${1:parent}, {
            bgPic       = \${2:"res/private/gui_edit/scroll/line.png"},   -- 背景图
            barPic      = \${3:"res/private/gui_edit/scroll/p.png"},      -- 滑动按钮图片
            Arr1PicN    = \${4:"res/private/gui_edit/scroll/t.png"},      -- 上（正常图）
            Arr1PicP    = \${5:"res/private/gui_edit/scroll/t_1.png"},    -- 上（按下图）可不传
            Arr2PicN    = \${6:"res/private/gui_edit/scroll/b.png"},      -- 下（正常图）
            Arr2PicP    = \${7:"res/private/gui_edit/scroll/b_1.png"},    -- 下（按下图）可不传
            default     = \${8:0},                    -- 进度条值（默认是0）
            x           = \${9:0},                    -- 进度条坐标 x
            y           = \${10:0},                    -- 进度条坐标 y
            list        = \${11:listHandle},           -- 滚动的容器 list
            callFunc    = \${12:function (send)       -- 容器滚动的回调函数
                SL:Print("回调函数")
            end},
        })
        `,
        "documentation": dedent`# 滚动容器添加滚动条
        ## SetScrollViewVerticalBar(widget, value)

        | 参数   | 必选 | 类型  | 注释       |
        | :----- | :--- | :---- | :--------- |
        | parent | 是   | obj   | 父节点对象 |
        | param  | 是   | table | 布局参数   |

        \`\`\`lua
        GUI:SetScrollViewVerticalBar(parent, {
            bgPic       = "res/private/gui_edit/scroll/line.png",   -- 背景图
            barPic      = "res/private/gui_edit/scroll/p.png",      -- 滑动按钮图片
            Arr1PicN    = "res/private/gui_edit/scroll/t.png",      -- 上（正常图）
            Arr1PicP    = "res/private/gui_edit/scroll/t_1.png",    -- 上（按下图）可不传
            Arr2PicN    = "res/private/gui_edit/scroll/b.png",      -- 下（正常图）
            Arr2PicP    = "res/private/gui_edit/scroll/b_1.png",    -- 下（按下图）可不传
            default     = 0,                    -- 进度条值（默认是0）
            x           = 0,                    -- 进度条坐标 x
            y           = 0,                    -- 进度条坐标 y
            list        = listHandle,           -- 滚动的容器 list
            callFunc    = function (send)       -- 容器滚动的回调函数
                SL:Print("回调函数")
            end,
        })
        \`\`\`
        `
    },
]



export function getCompletionItems(): vscode.CompletionItem[] {


    const completionItems: vscode.CompletionItem[] = [];
    scrollViewItems.forEach((item: any) => {
        completionItems.push(createFunctionCompletionItem(item.label, item.insertText, item.documentation));
    });
    return completionItems;
}

function createFunctionCompletionItem(label: string, insertText: string, documentation?: string): vscode.CompletionItem {
    const item = new vscode.CompletionItem(label, vscode.CompletionItemKind.Function);
    item.insertText = new vscode.SnippetString(insertText);
    if (documentation) {
        item.documentation = new vscode.MarkdownString(documentation);
    }
    return item;
}
